package com.bluefoxyu.domain;

import cn.hutool.json.JSONUtil;
import lombok.Getter;
import lombok.Setter;

import java.io.Serial;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/** 
* <p>
* description: 封装结果返回类
* </p>
*
* @author: bluefoxyu 
* @date: 2025-05-27 21:18:48 
*/
@Setter
@Getter
public class Result implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    private String code;      // 状态码
    private String msg;       // 描述信息
    private Object data;      // 返回数据

    public Result() {}

    public Result(String code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    
    /** 
    * <p>
    * description: 成功 - 无数据
    * </p>
    *
    * @author: bluefoxyu 
    * @date: 2025-05-27 21:19:07 
    */ 
    public static Result success() {
        return new Result("200", "成功", null);
    }


    /** 
    * <p>
    * description: 成功 - 带数据
    * </p>
    *
    * @param data 需要响应的参数
    * @author: bluefoxyu 
    * @date: 2025-05-27 21:19:25 
    */ 
    public static Result success(Object data) {
        return new Result("200", "成功", data);
    }
    /**
    * <p>
    * description: 成功 - 自定义消息和数据
    * </p>
    *
    * @param msg 消息
    * @param data 数据
    * @author: bluefoxyu 
    * @date: 2025-05-27 21:19:52 
    */ 
    public static Result success(String msg, Object data) {
        return new Result("200", msg, data);
    }

    /**
     * <p>
     * description: 全部自定义正确返回
     * </p>
     *
     * @param code 正确码
     * @param msg 正确提示
     * @param data 响应数据
     * @author: bluefoxyu
     * @date: 2025-05-27 21:24:56
     */
    public static Result success(String code, String msg, Object data) {
        return new Result(code, msg, data);
    }


    /** 
    * <p>
    * description: 失败 - 默认错误码和提示
    * </p>
    *
    * @author: bluefoxyu 
    * @date: 2025-05-27 21:20:17 
    */ 
    public static Result fail() {
        return new Result("500", "系统异常，请联系管理员", null);
    }

    /**
     * <p>
     * description: 失败 - 自定义响应data
     * </p>
     *
     * @param data 响应data
     * @author: bluefoxyu
     * @date: 2025-05-27 21:21:08
     */
    public static Result fail(Object data) {
        return new Result("500", "失败", data);
    }

    /** 
    * <p>
    * description: 失败 - 自定义提示和响应数据
    * </p>
    *
    * @param msg 提示
    * @param data 响应数据
    * @author: bluefoxyu 
    * @date: 2025-05-27 21:20:28 
    */ 
    public static Result fail(String msg, Object data) {
        return new Result("500", msg, data);
    }

    /**
    * <p>
    * description: 全部自定义错误返回
    * </p>
    *
    * @param code 错误码
    * @param msg 错误提示
    * @param data 响应数据
    * @author: bluefoxyu
    * @date: 2025-05-27 21:24:56
    */
    public static Result fail(String code, String msg, Object data) {
        return new Result(code, msg, data);
    }



    /** 
    * <p>
    * description: 自定义构建一个 Map 类型的 data
    * </p>
    *
    * @param key key
    * @param value value
    * @author: bluefoxyu 
    * @date: 2025-05-27 21:21:42 
    */ 
    public Result data(String key, Object value) {
        Map<String, Object> map = new HashMap<>();
        map.put(key, value);
        this.data = map;
        return this;
    }

    /** 
    * <p>
    * description: 转换为 JSON 字符串
    * </p>
    *
    * @return: java.lang.String 
    * @author: bluefoxyu 
    * @date: 2025-05-27 21:22:29 
    */ 
    public String toJson() {
        return JSONUtil.toJsonStr(this);
    }
}